Amazon Ec2 Instance Management with C#: Part 3 – Uploading and Importing a Key Pair
Before getting started
Skill Level: Beginner
Assumptions:
- You have completed Part 1 and 2 of Managing Amazon AWS with C# – EC2
Additional Information: I sometimes cover small sub-topics in a post. Along with AWS, you will also be exposed to:
- .NET Core 2.0 – If you use .NET Framework, the steps will be slightly different, but as this is a beginner level tutorial, it should be simple.
- Rhyous.SimpleArgs
Details
We may already have a key pair that we want to use, so we don’t want to create a new one. If that is the case, it can be uploaded.
Step 1 – Get key in the correct format
I used OpenSSL to do this.
- Download OpenSSL.
- Run this command:
[sh]
.\openssl.exe rsa -in c:\users\jbarneck\desktop\new.pem -pubou
t -out c:\users\jbarneck\desktop\new.pub
[sh]
Step 2 – Edit InstanceManager.cs file
We’ve created InstanceManager.cs in Part 1. Let’s edit it.
- Add a method to read the key file from disk and upload and import the key pair.
public static async Task ImportKeyPair(AmazonEC2Client ec2Client, string keyName, string keyFile)
{
var publicKey = File.ReadAllText(keyFile).Trim().RemoveFirstLine().RemoveLastLine();
string publicKeyAsBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(publicKey));
await ec2Client.ImportKeyPairAsync(new ImportKeyPairRequest(keyName, publicKeyAsBase64));
}
Notice: We are calling RemoveFirstLine() and RemoveLastLine(); This is because key files have a header and footer that must be removed before sending up to AWS. We’ll do this in the next section.
Step 3 – Add methods RemoveFirstLine and RemoveLastLine
- By the time this publishes, you should only need to install Rhyous.String.Library. Otherwise, add this class file:
namespace Rhyous.AmazonEc2InstanceManager { public static class StringExtensions { public static string RemoveFirstLine(this string text, char newLineChar = '\n') { if (string.IsNullOrEmpty(text)) return text; var i = text.IndexOf(newLineChar); return i > 0 ? text.Substring(i + 1) : ""; } public static string RemoveLastLine(this string text, char newLineChar = '\n') { var i = text.LastIndexOf(newLineChar); return (i > 0) ? text.Substring(0, i) : ""; } } }
Step 4 – Configure command line Arguments.
We already have an Actions arguments to edit.
- Add DeleteKeyPair as a valid action to the Action argument.
- Add an additional argument for the key file.
. . .
new Argument
{
Name = "Action",
ShortName = "a",
Description = "The action to run.",
Example = "{name}=default",
DefaultValue = "Default",
AllowedValues = new ObservableCollection<string>
{
"CreateKeyPair",
"DeleteKeyPair",
"ImportKeyPair"
},
IsRequired = true,
Action = (value) =>
{
Console.WriteLine(value);
}
},
. . .
new Argument
{
Name = "KeyFile",
ShortName = "pem",
Description = "The full path to a public key already created on your file system in PEM format. The full Private key won't work.",
Example = "{name}=c:\\My\\Path\\mykeyfile.pem",
CustomValidation = (value) => File.Exists(value),
Action = (value) =>
{
Console.WriteLine(value);
}
}
You can now upload a public key file for use on the Amazon Cloud.
Next: Part 4
Return to: Managing Amazon AWS with C#

